#pragma once
#include <vector>
#include <map>
#include <string>
#include <unordered_set>

class INP_card
{
public:
	INP_card();
	~INP_card();


	static std::vector<int> GetFaceNode(std::string elementType, int faceIndex)
	{
		if (ElementFaceMap.find(elementType) != ElementFaceMap.end())
		{
			return ElementFaceMap[elementType][faceIndex];
		}
		else
		{
			return std::vector<int>{};
		}
	};

	static int GetElementFaceCount(std::string elementType)
	{
		if (ElementFaceMap.find(elementType) != ElementFaceMap.end())
		{
			return ElementFaceMap[elementType].size();
		}
		else
		{
			return 0;
		}
	}


	static bool If3DAnalysisElement(std::string& target)
	{
		if (_2DAnalysisElement.find(target) != _2DAnalysisElement.end())
		{
			return false;
		}
		else
		{
			return true;
		}
	};

	static int FindFaceNumber(std::string elementType)
	{
		return ElementFaceMap[elementType].size();
	}

private:
	static const std::vector<std::string> INP_KEYS;

	static std::map<std::string, std::vector<std::vector<int>>> ElementFaceMap;

	static std::map<std::string, std::vector<std::vector<int>>> ElementFaceIDMap;

	static std::unordered_set<std::string> _2DAnalysisElement;
};